package com.nbsaas.boot.order.api.domain.request;

import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 订单查询请求对象
 * 使用Freemarker动态生成
 */
@Data
public class OrderQueryRequest {

    /**
     * 店铺ID
     */
    private Long shopId;

    /**
     * 客户ID
     */
    private Long customerId;

    /**
     * 订单状态
     */
    private Integer orderState;

    /**
     * 支付状态
     */
    private Integer payState;

    /**
     * 支付方式
     */
    private Integer payMethod;

    /**
     * 订单来源
     */
    private Integer orderSource;

    /**
     * 开始日期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startDate;

    /**
     * 结束日期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endDate;

    /**
     * 最小金额
     */
    private BigDecimal minAmount;

    /**
     * 最大金额
     */
    private BigDecimal maxAmount;

    /**
     * 订单编号
     */
    private String billNo;

    /**
     * 支付单号
     */
    private String payNo;

    /**
     * 微信openId
     */
    private String openId;

    /**
     * 会员卡ID
     */
    private Long vipCardId;

    /**
     * 优惠券ID
     */
    private Long shopCouponId;

    /**
     * 红包ID
     */
    private Long redPacketId;

    /**
     * 推广卡ID
     */
    private Long promotionCard;

    /**
     * 邀请人ID
     */
    private Long inviterId;

    /**
     * 邀请店铺ID
     */
    private Long inviterShop;

    /**
     * 门店ID
     */
    private Long storeId;

    /**
     * 是否使用积分
     */
    private Boolean useIntegral;

    /**
     * 是否使用红包
     */
    private Boolean useRedPacket;

    /**
     * 是否使用优惠券
     */
    private Boolean useCoupon;

    /**
     * 是否使用会员卡
     */
    private Boolean useVipCard;

    /**
     * 是否有退款
     */
    private Boolean hasRefund;

    /**
     * 是否已完成
     */
    private Boolean isCompleted;

    /**
     * 是否已支付
     */
    private Boolean isPaid;

    /**
     * 页码
     */
    private Integer pageNum = 1;

    /**
     * 每页大小
     */
    private Integer pageSize = 20;

    /**
     * 排序字段
     */
    private String sortField = "addDate";

    /**
     * 排序方向
     */
    private String sortDirection = "DESC";

    /**
     * 统计类型
     */
    private String statisticsType;

    /**
     * 分组字段
     */
    private String groupBy;

    /**
     * 是否包含详情
     */
    private Boolean includeDetails = false;

    /**
     * 是否包含统计
     */
    private Boolean includeStatistics = false;

    /**
     * 导出格式
     */
    private String exportFormat;

    /**
     * 时间范围类型
     */
    private String timeRangeType;

    /**
     * 自定义查询条件
     */
    private String customCondition;

    /**
     * 高级搜索关键词
     */
    private String keyword;

    /**
     * 标签
     */
    private String tags;

    /**
     * 备注
     */
    private String note;

    /**
     * 是否包含已删除
     */
    private Boolean includeDeleted = false;

    /**
     * 数据权限范围
     */
    private String dataScope;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 部门ID
     */
    private Long deptId;

    /**
     * 角色ID
     */
    private Long roleId;

    /**
     * 租户ID
     */
    private Long tenantId;

    /**
     * 应用ID
     */
    private Long appId;

    /**
     * 模块ID
     */
    private Long moduleId;

    /**
     * 功能ID
     */
    private Long functionId;

    /**
     * 操作类型
     */
    private String operationType;

    /**
     * 操作人ID
     */
    private Long operatorId;

    /**
     * 操作时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime operationTime;

    /**
     * 操作IP
     */
    private String operationIp;

    /**
     * 操作设备
     */
    private String operationDevice;

    /**
     * 操作浏览器
     */
    private String operationBrowser;

    /**
     * 操作系统
     */
    private String operationOs;

    /**
     * 操作位置
     */
    private String operationLocation;

    /**
     * 操作结果
     */
    private String operationResult;

    /**
     * 操作描述
     */
    private String operationDescription;

    /**
     * 扩展字段1
     */
    private String extField1;

    /**
     * 扩展字段2
     */
    private String extField2;

    /**
     * 扩展字段3
     */
    private String extField3;

    /**
     * 扩展字段4
     */
    private String extField4;

    /**
     * 扩展字段5
     */
    private String extField5;

    /**
     * 扩展字段6
     */
    private String extField6;

    /**
     * 扩展字段7
     */
    private String extField7;

    /**
     * 扩展字段8
     */
    private String extField8;

    /**
     * 扩展字段9
     */
    private String extField9;

    /**
     * 扩展字段10
     */
    private String extField10;
} 